package q461_hammingDistance;

public class Solution_2 {
    /*
    首先要了解异或运算 ^
    对于两个数字x y 使用异或运算 就是对两个数的二进制形式对位数进行判断运算
    如果两个数字的同一个位置相同 那么返回0 如果不同 则返回1
    所以 我们首先异或运算两个数 就可以得到两个数不同的所有位置都变为1的一个数
    然后我们又知道一个去除数字最右侧的1的方法 此题就可以更简单的解决
     */
    public int hammingDistance(int x, int y) {
        int tmp = x ^ y, ans = 0;
        while (tmp > 0) {
            tmp = tmp & (tmp - 1);
            ans++;
        }
        return ans;
    }
}
